/* 铅笔画效果
 *
 * 设定一个阀值，灰度化
 * 再把相邻的两个像素的灰度去比较，当灰度变化超过一定的量的时候，我们就判断它是轮廓。
 * 如果本点灰度与临近点灰度变化值大于阈值，置黑色；否则，置白色
 */
const pencilDrawing = function (imageData) {
    var data = imageData.data;
    //阀值越小则线越多
    var value = 10;
    //需调用灰度化方法
    grayFilter(imageData);

    for (var i = 0; i < data.length; i++) {
        if ((i + 1) % 4 !== 0) {
            //点灰度与临近点灰度变化值
            var c = Math.abs(data[i] - data[i + 4]);

            if (c > value)
            data[i] = 0;
            else
            data[i] = 255;
        }
    }

    return imageData;
}

//灰度效果：(去色)
const grayFilter = function (imageData) {
    var data = imageData.data;
    for (var i = 0; i < data.length - 4; i += 4) { //遍历各像素分量	.299 * r + .587 * g + .114 * b;
        var tmp = data[i] * 0.299 + data[i + 1] * 0.587 + data[i + 2] * 0.144;

        data[i] = data[i + 1] = data[i + 2] = tmp;
    }
    return imageData;
}

export default pencilDrawing;